var numList = [];
for (var i = 48; i <= 57; i++) {
    var char = String.fromCharCode(i);
    numList.push(char);
}
console.log(numList);

var smallList = [];
for (var i = 97; i <= 122; i++) {
    var char = String.fromCharCode(i);
    smallList.push(char);
}
console.log(smallList);

var bigList = [];
for (var i = 65; i <= 90; i++) {
    var char = String.fromCharCode(i);
    bigList.push(char);
}
console.log(bigList);

var speList = ["_", "$"]; //允许使用的特殊字符

var normalList = numList.concat(smallList, bigList, speList);
console.log(normalList);


// 随机验证码 => 不允许重复



// function randCode() {
//     var codeList = numList.concat(smallList, bigList);
//     var arr = [];
//     for (var i = 0; i < 4; i++) {  // 假设 i=2 时重复
//         var index = Math.floor(Math.random() * codeList.length);
//         var char = codeList[index];
//         if (!arr.includes(char)) {   // 不存在 => 放  
//             arr.push(char);
//         } else { //存在  => 怎么办?
//             console.log(char + "已存在");
//             i--;  // 存在 => 这一次不算   i-- => i = 1 => 本次循环结束 i++ => 下一次还是 2 
//         }
//     }
//     return arr.join("");
// }

// 随机验证码 => 1. 不允许重复  2. 数字 大写 小写 每样至少出现一个
function randCode() {
    var codeList = numList.concat(smallList, bigList);
    var arr = [];
    for (var i = 0; i < 4; i++) {  // 假设 i=2 时重复
        var index = Math.floor(Math.random() * codeList.length);
        var char = codeList[index];
        if (!arr.includes(char)) {   // 不存在 => 放  
            arr.push(char);
        } else { //存在  => 怎么办?
            console.log(char + "已存在");
            i--;  // 存在 => 这一次不算   i-- => i = 1 => 本次循环结束 i++ => 下一次还是 2 
        }
    }

    var isExistNum = false; // 假设不存在数字
    var isExistSmall = false;
    var isExistBig = false;

    for (var item of arr) {
        // 有一个字符在 numList中  => 存在数字
        if (numList.includes(item)) isExistNum = true;
        if (smallList.includes(item)) isExistSmall = true;
        if (bigList.includes(item)) isExistBig = true;
    }

    var level = isExistNum + isExistSmall + isExistBig;

    if (level < 3) {
        return randCode();
    }

    return arr.join("");
}